/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package br.com.saber.certificacao.modelos.validadores;

import br.com.saber.certificacao.ejbs.stateless.interfaces.VersaoBeanLocal;
import br.com.saber.certificacao.modelos.Versao;
import br.com.saber.certificacao.modelos.validadores.exceptions.VersaoException;
import br.com.saber.certificacao.modelos.validadores.exceptions.generica.ValidacaoExcecao;
import br.com.saber.certificacao.modelos.validadores.interfaces.ValidadorInterface;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.validator.UrlValidator;

/**
 *
 * @author gbvbahia
 */
public class VersaoValidador implements ValidadorInterface<Versao, VersaoBeanLocal>{

    private void validar(Versao entidade, VersaoBeanLocal bean) throws ValidacaoExcecao {
        if(StringUtils.isBlank(entidade.getNome())){
        lancarException(("versaoNomeNulo"),"Versão");
        }
        if(entidade.getNome().length() >50){
            lancarException(("versaoNomeLong"),"Versão");
        }
        if(entidade.getNotaParaPassar() == null){
            lancarException(("versaoMediaNula"),"Média Cobrada");
        }
        if(entidade.getNotaParaPassar() > 100){
            lancarException(("versaoMediaAlta"),"Média Cobrada");
        }
        if(entidade.getTempoProvaReal() == null){
            lancarException(("versaoTempoProvaNulo"),"Tempo de Prova");
        }
        if(entidade.getTotalQuestoesReal() == null){
            lancarException(("versaoQuantidadeQuestoesNulo"),"Total de Questões");
        }
        if(StringUtils.isBlank(entidade.getUrlSiteOficial())){
            lancarException(("versaoURLNulo"),"URL Site Oficial");
        }
        if(entidade.getUrlSiteOficial().length() > 255){
            lancarException(("versaoURLLong"),"URL Site Oficial");
        }
        if(!isUrlValida(entidade.getUrlSiteOficial())){
            lancarException(("versaoURLErro"),"URL Site Oficial");
        }
        if(entidade.getCertificacao() == null){
            lancarException(("versaoCertificacaoNula"),"Certificação");
        }
        
        Versao temp = bean.buscarVersaoPorNome(entidade.getNome());
        if(entidade.getId() == null && temp != null){
            lancarException(("versaoNomeExistente"),"Versão");
        }
        if(entidade.getId() != null && temp != null && !entidade.getId().equals(temp.getId())){
            lancarException(("versaoNomeExistente"),"Versão");
        }
        if(entidade.isMother() && entidade.getVersaoMother() != null){
            lancarException(("versaoMotherNotNull"),"Versão Superior");
        }
        if(!entidade.isMother() && entidade.getVersaoMother() == null){
            lancarException(("versaoMotherNull"),"Versão Superior");
        }
        if(entidade.isMother() && !entidade.getQuestoesDestaVersao().isEmpty()){
            lancarException(("versaoMotherQuestao"),"Versão Superior");
        }
        if(!entidade.isMother() && entidade.equals(entidade.getVersaoMother())){
            lancarException(("versaoMotherQuestaoPropria"),"Versão Superior");
        }
    }

    private boolean isUrlValida(String url){
        UrlValidator urlValidador = new UrlValidator();
        return urlValidador.isValid(url);
    }

    private void lancarException(String msg, String atributo){
        VersaoException ve = new VersaoException(msg);
        ve.setAtributoName(atributo);
        throw ve;
    }

    @Override
    public void validar(Versao entidade, VersaoBeanLocal bean, Object object) throws ValidacaoExcecao {
        this.validar(entidade, bean);
    }


}
